arr=[]
str = "hello ruby"
puts arr.class #Array
puts str.class #String
puts "*"*100

p arr.instance_of?(Array) #true
p str.instance_of?(String) #true

class HelloRuby #class定义一个类

    VERION = "1.0" #定义类常量，但这仅仅是约定，不是会语法限制

    @@count=0 #类成员变量

    def initialize(myname="xzx") #initialize固定的， 相当于构造方法，xzx是默认值
        @name=myname #@开头的是类成员变量
        @@count+=1
    end

    def sayHello() #定义实例方法
        puts "hello #{@name}"
    end

    class << self #定义类方法
        def sayHaha(name)
            puts "#{name} 哈哈"
        end

        def getInstanceCount
            return @@count #访问类成员变量
        end
    end
end

r1 = HelloRuby.new("张三") #创建对象
r2 = HelloRuby.new #使用默认参数，创建对象
r1.sayHello #hello 张三
r2.sayHello #hello xzx

HelloRuby.sayHaha("张三") #张三 哈哈
HelloRuby::sayHaha("李四") #李四 哈哈

p HelloRuby::VERION # 访问常量的方式使用双冒号

p HelloRuby::getInstanceCount


class AccTest
    def p1
        puts "公开的方法"
    end

    public :p1

    def p2
        puts "私有的方法"
    end

    private :p2

    def p3
        puts "保护的方法"
    end

    protected :p3
end

p "*"*100

acc1 = AccTest::new
acc1.p1
# acc1.p2 无法访问
# acc1.p3 无法访问


p "*"*100
class RingArray < Array
    def[](i)
        idx=i%size
        super(idx) # 调用父类的方法
    end
end
ww = RingArray["1", "2", "3", "4", "5"]
p ww[6] # 2